See this discussion: https://github.com/canboat/canboat/issues/153
GNSS Position Data - Message Type NMEA2000 Can https://hemispheregnss.com/gnssreference/GNSSPositionData.htm GNSSPositionData Message Integrity Checking
Maretron GPS200 GPS Antenna/Receiver v1.3 Integrity field on NMEA 2000 PGN 129029 – GNSS Position Data:
Data field (from 0, byte 30, bits 0 and 1) in PGN 129029 sent from a Raymarine A-series multifunction screen.
The captures were made with a logical analyzer. This information has also been verified in the files of the CanBoat project: candumpSample1.txt and candumpSample2.txt
I apologize, I had an error in the byte count. “GNSS integrity” starts at message bit 256, this is byte 32.
Looking in different sources I have observed the coincidence with the documentation of Maretron, and of course, it says the same in pgn.h It seems that this field does not have a useful translation to the sentences: GLL, RMA, RMC and the derivatives for the calculations in navigation: APB, RMB, XTE.
My concern has been to find an equivalence for the field “Data Valid” of these 6 sentences that I mentioned, which is the only one existing for versions of NMEA0183 prior to specification 3.0, and I thought it logical to think that a 0 in the GNSS integrity field corresponded to that “Data Valid” because I detected it together with “Position Fix” in GNS Method. But it is also possible that GNSS integrity is always at 0. GNS sentence on NMEA0183 has the same “GNSSMethod” information as PGN 129029, so there's no problem.
I think that the best way to interpret “Data Valid” and avoid problems is to ignore GNSS integrity, and use the own indications of NMEA0183:
And:
The positioning system Mode Indicator and Status fields shall not be null fields.
So this equivalence seems to be coherent: 129029 (GNSSMethod) Mode Indicator (N0183> = 3.0) Data valid
I think it is better to use GNSS Method exclusively to have a data integrity information.
The following graphic was helpful to me in using 129029 to create GGA.
I have found information about these PGNs. It's not the complete, but I think it's enough. A later PR https://github.com/canboat/canboat/pull/154/files/af85293cdb5974c5f942a6bbd79c87e07a230d5d..348b94788ac8821d7f5bd3e1cc4c3fa86bb70316
#define LOOKUP_SIMRAD_PILOT_MODE
(",0=Standby"
",1=Auto, compass commanded"
",2=Non Follow, hand commanded (not sure)"
",3=Wind Mode"
",4=Track Mode"
",5=No Drift, COG referenced")
#define LOOKUP_RAYMARINE_PILOT_MODE
(",0x0000=Standby"
",0x0040=Auto, compass commanded"
",0x0100=Vane, Wind Mode"
",0x0180=Track Mode"
",0x0181=No Drift, COG referenced (In track, course changes) ")
/* proprietary PDU2 (non addressed) single-frame range 0xFF00 to 0xFFFF (65280 - 65535) */
{“Simnet: Autopilot Mode”, 65340, /* NOTE 65341 in pgn.h maybe is not correct */ false, 0x08, 0,
{{"Manufacturer Code", 11, RES_MANUFACTURER, false, "=1857", "Simrad"},
{"Reserved", 2, RES_NOTUSED, false, 0, ""},
{"Industry Code", 3, RES_LOOKUP, false, "=4", "Marine Industry"},
{"Autopilot Status 1", BYTES(1), false, "=0x10", "Pilot ON"},
{"Autopilot Mode", BYTES(1), false, LOOKUP_SIMRAD_PILOT_MODE, ""},
{0xfe},
{"Autopilot Status 2", 3, false, "=2", "Pilot ON"},
{"Reserved", 5, RES_NOTUSED, false, 0, "0x1F"},
{"Reserved", BYTES(2), RES_BINARY, false, 0, "0x00, 0x80"}}}
// Capture StandBy: 0x0CFF3C00, 0x41 0x9F 0x00 0x00 0xFE 0xF8 0x00 0x80
// Capture Auto: 0x0CFF3C00, 0x41 0x9F 0x10 0x01 0xFE 0xFA 0x00 0x80
,
{"Seatalk: Pilot Mode",
65379,
false,
0x08,
0,
{{"Manufacturer Code", 11, RES_MANUFACTURER, false, "=1851", "Raymarine"},
{"Reserved", 2, RES_NOTUSED, false, 0, ""},
{"Industry Code", 3, RES_LOOKUP, false, "=4", "Marine Industry"},
{"Pilot Mode", BYTES(2), LOOKUP_RAYMARINE_PILOT_MODE, false, 0, ""},
{"Pilot Mode Data", BYTES(1), RES_BINARY, false, 0, ""},
{"Reserved", BYTES(3), RES_BINARY, false, 0, ""}}}
// Capture StandBy: 0x1CFF63CC, 0x3B 0x9F 0x00 0x00 0x00 0x00 0x02 0xFF
// Capture Auto: 0x1CFF63CC, 0x3B 0x9F 0x40 0x00 0x00 0x00 0x02 0xFF
// Capture Vane: 0x1CFF63CC, 0x3B 0x9F 0x00 0x01 0x00 0x00 0x02 0xFF
// Capture Track: 0x1CFF63CC, 0x3B 0x9F 0x80 0x01 0x00 0x00 0x02 0xFF
// Capture No Drift: 0x1CFF63CC, 0x3B 0x9F 0x81 0x01 0x00 0x00 0x02 0xFF (While track mode, manual course correction)
From Tehani: https://github.com/canboat/canboat/pull/154
Timo Lappalainen NMEA 2000 Library for Arduino https://github.com/ttlappalainen
https://github.com/canboat/canboat/issues/162 Rate of turn in an ais “Class A Position Report” is an 8 bit signed integer with special meaning of the values +- 127. As canboat does not detect these special values, an advise is to range check that the magnitude of rate of turn from PGN 129038 is below say 0,208 rad/s.
Kees wrote: